﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Reflection;
using System.Text;
using System.IO;

namespace ICRprojekt.UcitavanjePitanja
{
    static public class DohvatIzDatoteke
    {
        ///*
        // * 
        // * ISPRAVAN OBLIK ZAPISA PITANJA
        // * 
        // * !1!
        // * zem
        // * Glavni grad Brazila je?
        // * Sao Paolo
        // * Rio de Janeiro
        // * Brasilia# <hash oznacava tocan odgovor>
        // * Novac koji se koristi u Brazilu je?
        // * Real
        // * <prazan red>
        // * 
        // */

        ///// <summary>
        ///// Lista učitanih pitanja.
        ///// </summary>
        //private static readonly List<Pitanje> pitanja = new List<Pitanje> ( );

        ///// <summary>
        ///// Lista učitanih pitanja.
        ///// </summary>
        //public static List<Pitanje> Pitanja
        //{
        //    get { return pitanja; }
        //}

        ///// <summary>
        ///// Parsira datoteku i vadi iz nje pitanja za kviz.
        ///// Pitanja u datoteci moraju biti u ispravnom obliku!
        ///// </summary>
        ///// <returns>Listu svih pitanja u datoteci.</returns>
        //static public List<Pitanje> DohvatiPitanjaIzDat()
        //{
            
        //    // dohvati referencu na trenutni assembly
        //    var a = Assembly.GetExecutingAssembly ( );

        //    // get a list of resource names from the manifest
        //    var assembly_datoteke = a.GetManifestResourceNames ( );
        //    StreamReader sr = null;

        //    // pretrazi resource za datotekom s pitanjima
        //    foreach ( var resource in assembly_datoteke )
        //        if ( resource.Contains ( "pitanja.txt" ) )
        //        {
        //            sr = new StreamReader ( a.GetManifestResourceStream ( resource ), Encoding.Unicode );
        //            break;
        //        }

        //    // ako ucitavanje nije uspjelo
        //    if ( sr == null )
        //        throw new Exception( "Nije pronadjena datoteka s pitanjima!" );

        //    // procitati sva pitanja i za svako kreirati Pitanje
        //    string redak;

        //    while ( ( redak = sr.ReadLine ( ) ) != null )
        //    {
        //        // trimaj i makni usklicnike
        //        redak = redak.Trim( );
        //        redak = redak.Replace( "!", "" );

        //        // parsiraj indeks pitanja
        //        var indeks = int.Parse( redak );

        //        // odredi kategoriju pitanja
        //        redak = sr.ReadLine( ).Trim( );
        //        var kategorija = OdrediKategoriju( redak );

        //        string prvo_pitanje = null;
        //        List<string> ponudeni_odgovori = null;
        //        string tocan_ponudeni = null;
        //        // ako nije Jackpot pitanje
        //        if ( kategorija != KategorijaPitanja.Jackpot )
        //        {
        //            // dohvati prvo pitanje
        //            prvo_pitanje = sr.ReadLine( ).Trim( );

        //            // dohvati ponudene odgovore i tocan odgovor
        //            ponudeni_odgovori = new List<string>( 3 );
        //            tocan_ponudeni = string.Empty;
        //            for ( int i = 0; i < 3; i++ )
        //            {
        //                redak = sr.ReadLine( ).Trim( );
        //                // ako je tocan, makni oznaku i spremi ga kao tocan odgovor
        //                if ( redak.EndsWith( "#" ) )
        //                {
        //                    redak = redak.Substring( 0, redak.Length - 1 );
        //                    tocan_ponudeni = redak;
        //                }
        //                // dodaj svaki procitani odgovor medu ponudene
        //                ponudeni_odgovori.Add( redak );
        //            }
        //        }

        //        // procitaj drugo pitanje i tocan odgovor
        //        var drugo_pitanje = sr.ReadLine( ).Trim( );
        //        var drugi_odgovor = sr.ReadLine( ).Trim( );

        //        // preskoci prazan red i predji na iduce pitanje
        //        sr.ReadLine( );

        //        // dodaj pitanje u listu pitanja
        //        Pitanja.Add( new Pitanje( kategorija,
        //                                  indeks,
        //                                  prvo_pitanje,
        //                                  ponudeni_odgovori,
        //                                  tocan_ponudeni,
        //                                  drugo_pitanje,
        //                                  drugi_odgovor ) );
        //    }
        //    sr.Close( );
            

        //    return Pitanja;
        //}

        ///// <summary>
        ///// Metoda izdvaja iz svih pitanja samo ona zadane kategorije.
        ///// </summary>
        ///// <param name="kategorija">Kategorija pitanja.</param>
        ///// <returns>Lista pitanja zadane kategorije.</returns>
        //static public List<Pitanje> DohvatiKategoriju( KategorijaPitanja kategorija )
        //{
        //    if ( pitanja.Count == 0 )
        //        DohvatiPitanjaIzDat( );

        //    var pitanja_zadane_kategorije = from n in Pitanja
        //                                    where n.Kategorija == kategorija
        //                                    select n;

        //    return pitanja_zadane_kategorije.ToList( );
        //}

        /// <summary>
        /// Pomocna metoda za odredjivanje kategorije.
        /// </summary>
        /// <param name="kratica">String kratica kategorije</param>
        /// <returns>Objekt kategorije pitanja.</returns>
        static public KategorijaPitanja OdrediKategoriju(string kratica)
        {
            /*pov - povijest, zem-zemljopis, spo-sport, jds- jucer danas sutra, kul-kultura, jck-jackpot*/
            switch (kratica)
            {
                case "pov":
                    return KategorijaPitanja.Povijest;
                case "zem":
                    return KategorijaPitanja.Zemljopis;
                case "spo":
                    return KategorijaPitanja.Sport;
                case "jds":
                    return KategorijaPitanja.JDS;
                case "kul":
                    return KategorijaPitanja.Kultura;
                case "jck":
                    return KategorijaPitanja.Jackpot;
                default:
                    throw new Exception("Krivi unos kategorije");
            }
        }

        /// <summary>
        /// #DINO
        /// Pretvaranje kategorije u kraticu
        /// </summary>
        /// <param name="kratica">Objekt kategorije pitanja</param>
        /// <returns>String kratica kategorije</returns>
        static public string OdrediKraticu(KategorijaPitanja kategorija)
        {
            switch (kategorija)
            {
                case KategorijaPitanja.Povijest:
                    return "pov";
                case KategorijaPitanja.Zemljopis:
                    return "zem";
                case KategorijaPitanja.Sport:
                    return "spo";
                case KategorijaPitanja.JDS:
                    return "jds";
                case KategorijaPitanja.Kultura:
                    return "kul";
                case KategorijaPitanja.Jackpot:
                    return "jck";
                default:
                    throw new Exception("Krivi unos kategorije");
            }
        }
    }
}